
// 查看进程的方法：JDK路径下的bin里有个jconsole.exe
// (一般路径是：`C:\Program Files\Java\jdk版本\bin\jconsole.exe`)，这里就可以连接进程，并查看这个进程中的信息。
// 使用while让线程持续运行，才能在jconsole中看到进程中的线程。
class MyThread extends Thread{
    @Override
    public void run() {
        while (true) {
            System.out.println("继承Thread类，重写run()!");
        }
    }
}

class MyRunnable implements Runnable{
    @Override
    public void run() {
        while (true) {
            System.out.println("实现Runnable接口，重写run()!");
        }
    }
}
public class ThreadTest {
    public static void main(String[] args) {
        // 法三：继承Thread类，重写run()，使用匿名内部类
        Thread t3 = new Thread(){
            @Override
            public void run() {
                while (true) {
                    System.out.println("继承Thread类，重写run()，使用匿名内部类!");
                }
            }
        };
        // 法四：实现Runnable接口，重写run()，使用匿名内部类!
        Thread t4 = new Thread(new Runnable() {
            @Override
            public void run() {
                while (true) {
                    System.out.println("实现Runnable接口，重写run()，使用匿名内部类!");
                }
            }
        });
        // 法五：使用lambda表达式
        Thread t5 = new Thread(()->{
            while (true) {
                System.out.println("使用lambda表达式!");
            }
        });


        // 法一：继承Thread，重写run()
        Thread t1 = new MyThread();


        // 法二：runnable类实现Runnable接口，重写run()，再实例化线程对象
        Runnable runnable = new MyRunnable();
        Thread t2 = new Thread(runnable);

        t1.start();   // 创建一个线程对象
        t2.start();
        t3.start();
        t4.start();
        t5.start();
        while (true) {
            System.out.println("Hello main Thread!");
        }
    }
}
